/************************************
 文件明 ：  bsp_key.c
 作者   ：  胡秋峰
 描述   ：  按键驱动文件
 ************************************/
#include "bsp_key.h"
#include "bsp_gpio.h"
#include "bsp_delay.h"

/**
 * @描述    ： 初始化按键
 * @参数    ： 无
 * @返回值  ： 无 
 */
void key_init(void)
{
    gpio_pin_config_t key_config;

    /* IO复用 GPIO1_IO18*/
    IOMUXC_SetPinMux(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0);

    /* 2、配置UART1_CTS_B的IO属性
     *bit 16:0 HYS关闭 
     *bit [15:14]: 11 默认22K上拉 
     *bit [13]: 1 pull功能 
     *bit [12]: 1 pull/keeper使能 
     *bit [11]: 0 关闭开路输出 
     *bit [7:6]: 10 速度100Mhz 
     *bit [5:3]: 000 关闭输出 
     *bit [0]: 0 低转换率 36
    */
   IOMUXC_SetPinConfig(IOMUXC_UART1_CTS_B_GPIO1_IO18, 0XF080);

   /* 设置IO位输入 */
   key_config.direction = kGPIO_DigitalInput;
   gpio_init(GPIO1, 18, &key_config);
}

/**
 * @描述    ： 获取按键值
 * @参数    ： 无
 * @返回值  ： 0：没有按键按下 其他值：对应按键编号
 */
int key_get_value(void)
{
    int res = 0;
    static unsigned char release = 1; /* 按键状态 1：松开 */

    /* 按键按下 */
    if ((release == 1) && (gpio_pin_read(GPIO1, 18) == 0)) {
        delay_ms(10); /* 延迟消抖 */
        release = 0;
        if (gpio_pin_read(GPIO1, 18) == 0) {
            res = KEY0_VALUE;
        }
    } else if (gpio_pin_read(GPIO1, 18) == 1) {
        res = KEY_NONE;
        release = 1; /* 标记按键释放 */
    }
    
    return res;
}
